package controller.metadados;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.jdom2.Document;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

public class XML {

	private Document documentoMetadados;
	private SAXBuilder construtor;
	private File arquivoMetadados;
	private XMLOutputter exportador;

	public XML(Document documentoMetadados, String nomeBanco) {
		this.documentoMetadados = documentoMetadados;
		this.construtor = new SAXBuilder();
		this.exportador = new XMLOutputter();
		this.carregarXML(nomeBanco);
	}

	public void carregarXML(String nomeBanco) {
		arquivoMetadados = new File(Configuracoes.CAMINHO + nomeBanco
				+ "\\metadados.xml");

		if (arquivoMetadados != null && arquivoMetadados.isFile()
				&& arquivoMetadados.exists()) {
			lerXML();
		} else {
			criarXML(nomeBanco);
		}
	}

	public void criarXML(String nomeBanco) {
		System.out.println("XML.criarXML()");
		Writer writer = null;
		try {
			arquivoMetadados = new File(Configuracoes.CAMINHO + nomeBanco
					+ "\\metadados.xml");
			writer = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(arquivoMetadados)));
			exportador.output(documentoMetadados, writer);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void lerXML() {
		System.out.println("XML.lerXML()");
		try {
			construtor = new SAXBuilder();
			documentoMetadados = construtor.build(arquivoMetadados);
		} catch (IOException e) {
			// TODO: handle exception
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void gravarXML() {

		if (arquivoMetadados == null) {
			this.criarXML("banco 1");
		}
		Writer writer = null;
		try {
			writer = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(arquivoMetadados)));
			exportador.output(documentoMetadados, writer);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void deletarXML(String nomeBanco) {
		File diretorioBanco = new File(Configuracoes.CAMINHO + nomeBanco);
		File[] arquivos = diretorioBanco.listFiles();

		for (File file : arquivos) {
			if (file.isFile()) {
				if (file.getName().equals("metadados.xml")) {
					file.delete();
					break;
				}
			}

		}
	}

	public Document getDocumentoMetadados() {
		return documentoMetadados;
	}
}
